package response

import (
	"github.com/gogf/gf/v2/net/ghttp"
)

// JsonResponse 数据返回通用JSON数据结构
type JsonResponse struct {
	Code    int         `json:"code"`    // 错误码((0:成功, 1:失败, >1:错误码))
	Message string      `json:"message"` // 提示信息
	Data    interface{} `json:"data"`    // 返回数据(业务接口定义具体数据结构)
}

// Json 返回标准JSON数据
func Json(r *ghttp.Request, code int, message string, data ...interface{}) {
	responseData := interface{}(nil)
	if len(data) > 0 {
		responseData = data[0]
	}
	r.Response.WriteJson(JsonResponse{
		Code:    code,
		Message: message,
		Data:    responseData,
	})
}

// JsonExit 返回标准JSON数据并退出当前HTTP执行流程
func JsonExit(r *ghttp.Request, code int, message string, data ...interface{}) {
	Json(r, code, message, data...)
	r.Exit()
}

// Success 返回成功响应
func Success(r *ghttp.Request, data ...interface{}) {
	message := "操作成功"
	Json(r, 0, message, data...)
}

// SuccessExit 返回成功响应并退出
func SuccessExit(r *ghttp.Request, data ...interface{}) {
	message := "操作成功"
	JsonExit(r, 0, message, data...)
}

// Error 返回错误响应
func Error(r *ghttp.Request, message string, data ...interface{}) {
	Json(r, 1, message, data...)
}

// ErrorExit 返回错误响应并退出
func ErrorExit(r *ghttp.Request, message string, data ...interface{}) {
	JsonExit(r, 1, message, data...)
}

// PageResult 分页结果
type PageResult struct {
	List  interface{} `json:"list"`  // 数据列表
	Total int         `json:"total"` // 总数
	Page  int         `json:"page"`  // 当前页
	Limit int         `json:"limit"` // 每页数量
}

// Page 返回分页数据
func Page(r *ghttp.Request, list interface{}, total, page, limit int) {
	Json(r, 0, "获取成功", PageResult{
		List:  list,
		Total: total,
		Page:  page,
		Limit: limit,
	})
}

// PageExit 返回分页数据并退出
func PageExit(r *ghttp.Request, list interface{}, total, page, limit int) {
	JsonExit(r, 0, "获取成功", PageResult{
		List:  list,
		Total: total,
		Page:  page,
		Limit: limit,
	})
}